package cn.edu.ctgu.consoleinteraction;

import cn.edu.ctgu.PatientInfo;
import cn.edu.ctgu.QuestionnaireService;

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

/**.
 * 控制台交互类，用于与用户进行问卷交互，收集患者信息并给出建议。
 */
public class InteractiveQuestionnaire {
    /**.
     * 问卷服务对象，用于获取问题和建议。
     */
    private final QuestionnaireService service;
    /**.
     * 用于从控制台读取用户输入的 Scanner 对象。
     */
    private final Scanner scanner;

    /**.
     * 构造函数，初始化问卷服务和 Scanner 对象。
     */
    public InteractiveQuestionnaire() {
        service = new QuestionnaireService();
        try {
            scanner = new Scanner(new InputStreamReader(System.in, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

    /**.
     * 开始问卷交互流程，包括症状采集、后续问题询问和获取建议。
     */
    public void start() {
        // 症状采集
        List<QuestionnaireService.Question> symptomQuestions = service.getQuestions(null);
        String symptomAnswer = askQuestion(symptomQuestions.get(0));

        // 处理症状详情、症状时长和接触史问题
        PatientInfo patient = new PatientInfo();
        Set<String> symptoms = new HashSet<>();
        symptoms.add(symptomAnswer);
        patient.setSymptoms(symptoms);

        List<QuestionnaireService.Question> followUpQuestions = service.getQuestions(symptomAnswer);
        for (QuestionnaireService.Question question : followUpQuestions) {
            String answer = askQuestion(question);
            if (question.getType().equals("症状时长")) {
                patient.setSymptomDuration(answer);
            } else if (question.getType().equals("接触史")) {
                Set<String> contactHistory = new HashSet<>();
                contactHistory.add(answer);
                patient.setContactHistory(contactHistory);
            }
        }

        // 获取建议
        String recommendation = service.getRecommendation(patient);
        System.out.println("建议: " + recommendation);
    }

    /**.
     * 询问问题并获取用户回答。
     *
     * @param question 要询问的问题对象
     * @return 用户选择的答案
     */
    private String askQuestion(QuestionnaireService.Question question) {
        System.out.println(question.getQuestionText());
        List<String> options = question.getOptions();
        for (int i = 0; i < options.size(); i++) {
            System.out.println((i + 1) + ". " + options.get(i));
        }
        int choice = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        return options.get(choice - 1);
    }

    /**.
     * 程序入口点，创建 InteractiveQuestionnaire 对象并启动问卷交互。
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        InteractiveQuestionnaire interactiveQuestionnaire = new InteractiveQuestionnaire();
        interactiveQuestionnaire.start();
    }
}